我有一个像这样的对象数组:
Object {index: "4", value: -1}
Object {index: "0", value: 0}
Object {index: "6", value: 0}
Object {index: "8", value: 0}
Object {index: "1", value: 1}
Object {index: "3", value: 1}
Object {index: "5", value: 1}
Object {index: "7", value: 1}
第一个索引为 0,我可以像
console.log[array[0]
那样访问它,这会给我 Object {index: "4", value: -1}
现在,如果我不想使用对象数组的索引,而是想通过 value
或 来访问它,该怎么办? index
在对象本身内部。我尝试过几个不同的命令,例如。
console.log(array["index: " + 8]
console.log(array["index:" == 8]
除了上面两个示例抛出未定义或错误之外,这些都没有做任何事情,我希望它们打印出来
Object {index: "8", value: 0}
我希望这是有道理的
function find_index(x) {
var y = '';
for (var i = 0; i < arr.length; i++) {
if (arr[i].index == x) {
y = arr[i];
break;
}
}
return y;
}
console.log(find_index(8)); //Object {index: "8", value: 0}
这里与
8
无关。这根本不是在 JavaScript 中处理对象的方式,即使是最基本的教程也会向您展示。
给定
obj = {index: "4", value: -1}
,您可以使用 obj.index
或 obj.value
访问这两个值。你不可能发明一些 "index: == 8"
的怪异并期望得到合理的结果。
obj = {index: "4", value: -1}
console.log(obj.index) // 4
console.log(obj.value) // -1
如果你想找到一个索引为8的对象,这需要使用循环顺序扫描数组,而不是编写一些伪查询语言。
要创建一个在两个 AG Grid 组件之间同步过滤器的 React 项目,您需要执行以下步骤:
以下是实现此目标的分步指南:
打开终端并运行以下命令来创建新的 React 应用程序:
npx create-react-app ag-grid-sync --template typescript
cd ag-grid-sync
安装 AG Grid 所需的软件包:
npm install ag-grid-react ag-grid-community
创建两个文件:
GridOne.tsx
和GridTwo.tsx
。
GridOne.tsx
:
import React, { useRef, useCallback } from 'react';
import { AgGridReact } from 'ag-grid-react';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-alpine.css';
import { ColDef } from 'ag-grid-community';
interface GridOneProps {
onFilterChanged: (filters: any) => void;
filters: any;
}
const GridOne: React.FC<GridOneProps> = ({ onFilterChanged, filters }) => {
const gridRef = useRef<AgGridReact>(null);
const columnDefs: ColDef[] = [
{ headerName: "Make", field: "make" },
{ headerName: "Model", field: "model" },
{ headerName: "Price", field: "price" },
];
const rowData = [
{ make: "Toyota", model: "Celica", price: 35000 },
{ make: "Ford", model: "Mondeo", price: 32000 },
{ make: "Porsche", model: "Boxster", price: 72000 },
];
const onFilterChangedCallback = useCallback(() => {
const gridApi = gridRef.current!.api;
const allFilters = gridApi.getFilterModel();
onFilterChanged(allFilters);
}, [onFilterChanged]);
return (
<div className="ag-theme-alpine" style={{ height: 200, width: 600 }}>
<AgGridReact
ref={gridRef}
columnDefs={columnDefs}
rowData={rowData}
onFilterChanged={onFilterChangedCallback}
defaultColDef={{ filter: true }}
filterModel={filters}
/>
</div>
);
};
export default GridOne;
GridTwo.tsx
:
import React, { useRef, useCallback } from 'react';
import { AgGridReact } from 'ag-grid-react';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-alpine.css';
import { ColDef } from 'ag-grid-community';
interface GridTwoProps {
onFilterChanged: (filters: any) => void;
filters: any;
}
const GridTwo: React.FC<GridTwoProps> = ({ onFilterChanged, filters }) => {
const gridRef = useRef<AgGridReact>(null);
const columnDefs: ColDef[] = [
{ headerName: "Make", field: "make" },
{ headerName: "Model", field: "model" },
{ headerName: "Price", field: "price" },
];
const rowData = [
{ make: "BMW", model: "X5", price: 50000 },
{ make: "Audi", model: "A6", price: 45000 },
{ make: "Mercedes", model: "C-Class", price: 40000 },
];
const onFilterChangedCallback = useCallback(() => {
const gridApi = gridRef.current!.api;
const allFilters = gridApi.getFilterModel();
onFilterChanged(allFilters);
}, [onFilterChanged]);
return (
<div className="ag-theme-alpine" style={{ height: 200, width: 600 }}>
<AgGridReact
ref={gridRef}
columnDefs={columnDefs}
rowData={rowData}
onFilterChanged={onFilterChangedCallback}
defaultColDef={{ filter: true }}
filterModel={filters}
/>
</div>
);
};
export default GridTwo;
App.tsx
:
import React, { useState, useCallback } from 'react';
import GridOne from './GridOne';
import GridTwo from './GridTwo';
const App: React.FC = () => {
const [filters, setFilters] = useState<any>({});
const handleFilterChanged = useCallback((newFilters: any) => {
setFilters(newFilters);
}, []);
return (
<div>
<h1>Grid One</h1>
<GridOne onFilterChanged={handleFilterChanged} filters={filters} />
<h1>Grid Two</h1>
<GridTwo onFilterChanged={handleFilterChanged} filters={filters} />
</div>
);
};
export default App;
运行以下命令来启动您的项目:
npm start
您应该在页面上看到两个 AG Grid 组件。当您在一个网格上应用过滤器时,它将同步并将相同的过滤器应用到另一个网格。此设置确保过滤器状态通过父组件在两个网格之间共享 (
App.tsx
)。